package com.lanqiao.recursionAndRecursion;
/*
*   众所周知在扑克牌中，有一个老掉牙的游戏叫做 24 点，选取 4 张牌
    进行加减乘除，看是否能得出 24 这个答案。
    现在小蓝同学发明了一个新游戏，他从扑克牌中依次抽出6张牌，注
    意不是一次抽出，进行计算，看是否能够组成 42 点,满足输出 YES
    反之输出 NO。
    最先抽出来的牌作为第一个操作数，抽出牌做第二个操作数，运算结
    果再当作第一个操作数，继续进行操作。
    注:除不尽的情况保留整数，而且扑克牌的四张10 都丢了，不会出
    现 10，1和A都可能出现并表示1。
    请设计一个程序对该问题进行解答
    输入描述
    输出仅一行包含 6 个字符。
    保证字符∈123456789JAKA
    输出描述
    若给出到字符能够组成 42 点,满足输出 YES，反之输出 NO.
    *
    * 示例
    输入
    KAQ623
    输出
    YES
    样例说明
    ·KxA=K即13x1=13
    。13/12-1保留整数
    。1+6=7
    。7*2-14
    。14*3-42
* */

import java.util.*;

/**
 * @author 86184
 */
public class FortyTwoQuestion {
    public static void main(String[] args) {
        //最先想到的方法是反向暴力递推
        Scanner scan = new Scanner(System.in);
        //接收数据
        int[] nums = new int[6];
        for (int i = 0; i < nums.length; i++) {
            String str = scan.next();
            switch (str){
                case "J":
                    nums[i] = 11;
                    break;
                case "Q":
                    nums[i] = 12;
                    break;
                case "K":
                    nums[i] = 13;
                    break;
                case "A":
                    nums[i] = 1;
                    break;
                default:
                    nums[i] = Integer.parseInt(str);
                    break;
            }
        }
        //从后递推向前
        List<Integer> list = new ArrayList<>();
        list.add(42);   //初始值为42
        for (int i = nums.length - 1; i >= 1; i--) {
            List<Integer> temp = new ArrayList<>();
            for (Integer listNum : list) {
                temp.add(listNum + nums[i]);
                temp.add(listNum - nums[i]);
                temp.add(listNum * nums[i]);
                temp.add(listNum / nums[i]);
            }
            list = temp;
        }
        //遍历集合判断有没有第一个数
        for (Integer i : list) {
            if(i == nums[0]){
                System.out.println("YES");
                return;
            }
        }
        System.out.println("NO");
    }
}
